1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
use strict; use warnings; use File::Find; use POSIX();
my (@dir) = @ARGV; my $linecount=0 ;
if ($#ARGV < 0) { print "\n\nOpps....Invalid Syntax !!!!\n" ; print "Usage : ./perm1.pl <path to capture permission>\n\n" ; print "Example : ./perm1.pl /home/oralce\n\n" ; exit ; } my $logdir=$dir[0] ;
my $date = POSIX::strftime( '%a-%b-%d-%H-%M-%S-%Y', localtime); my $logfile="permission-".$date; my $cmdfile="restore-perm-".$date.".cmd" ;
open LOGFILE, "> $logfile" or die $! ; open CMDFILE, "> $cmdfile" or die $! ; find(\&process_file,@dir);
print "Following log files are generated\n" ; print "logfile : ".$logfile. "\n" ; print "Command file : ".$cmdfile. "\n" ; print "Linecount : ".$linecount."\n" ; close (LOGFILE) ; close (CMDFILE) ;
sub process_file { my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks,$username,$user,$pass,$comment,$home,$shell,$group); my %uiduname = () ; my %gidgname = () ; my $filename = $File::Find::name;
open (PASSWDFILE, '/etc/passwd') ;
while ( <PASSWDFILE>) { ($user,$pass,$uid,$gid,$comment,$home,$shell)=split (/:/) ; $uiduname{$uid}=$user ; } close (PASSWDFILE) ;
open (GRPFILE, '/etc/group') ;
while ( <GRPFILE>) { ($group,$pass,$gid)=split (/:/) ; $gidgname{$gid}=$group ; } close (GRPFILE) ;
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat("$filename");
printf LOGFILE "%o %s %s %s\n", $mode & 07777, $uiduname{$uid}, $gidgname{$gid}, "\"$filename\"" ; printf CMDFILE "%s %s%s%s %s\n", "chown ",$uiduname{$uid}, ":", $gidgname{$gid}, "\"$filename\"" ; printf CMDFILE "%s %o %s\n", "chmod ",$mode & 07777, "\"$filename\"" ; $linecount++ ; }
|